สวัสดี ปี ใหม่ จร้า. เนื่องจาก ช่วงนี้เจอ คนโพสถามเรื่อง ddns มาหลายรอบในเฟซบุ๊ค เลยคิดว่าเอ่าน่าเดียว ลองหาเวลาว่ามาเขียนซักกะหน่อย แลนแล้วจนรอดก็ไม่ว่างซักที. 555 วันนี้ กินข้าวเสร็จเลยเอาว่ะ มานั่งเขียนล่ะเดียวไม่ได้ทำซักกะที
เอาล่ะ หลักการ ของ การทำ DDNS คือ client หรือ host ส่งข้อมูลมาอัพเดท dns server ของเรา เพื่ออัพเดทค่า A ให้เปลี่ยนเป็น IP ใหม่ ๆ เราจะได้เข้าเป็นชื่อได้ ง่าย ๆ เช่น ?a.web.com หรือ b.web.com ไรพวกนี้
สิ่งที่จำเป็นต้องมี
VPS หรือ โฮสติ้ง. ถูก ๆสักที่. ราคาที่เห็นตามท้องตลาดก็ 150 BATH ต่อเดือน
DOMAIN ชื่อ ตัวเอง ราคา ตามท้องตลาด ตก 350 บาทต่อปี
รวม ต้นทุนก็ (150 x 12)+350=2,100 บาทต่อปี.
หากมี vps ทำเว็บไว้อยู่แล้ว ก็ประยัดลงไปอีกแยะเพราะ ระบบแทบกินเซอร์วิทน้อยมาก ๆ ที่ทำคัญ จะสร้างเป็นพัน ๆ ชื่อ sub domain ก็ได้ โดยรวมแล้วถูกมากกว่าไปซท่อพวก dyn อีก
ขั้นแรก สมัคร cloudflare.com ครับจดโดเมนให้เรียบร้อยแล้วใช้ cloudflare.com เป็น DNS SERVER เลือก plan แบบฟรี เอาจะได้ประหยัด ๆ
หรือคนจะประหยัดกว่านั้น ทำ cname วิ่งมาที่. Mikrotik ที่บ้าน แล้วเอา pi มาทำเป็นเว็บ เซิฟเวอร์ อัพเดทไอพีเองก็ได้อยู่ครับ (ยิ่งยุ่งยากขึ้นอีกนิดแต่ก็ลดเงินไปอีกโขใหญ่ ๆ เลย ลดเงินต้นทุนไปอีกเกือบสองพัน)
ตามตัวอย่าง ผมซื้อ DOMAIN ชื่อ mt108.info แล้วสร้างชื่อ sub ว่า test.mt108.info
ขั้นนี้ คือ เราสร้างชื่อรอไว้แล้วต่อมาก็ ทำตัวอัพเดทกัน
ต่อ มาผมออกแบบ database ไว้แบบนี้ครับ
client_id กะเอาไว้เป็น ไอดี ไว้สำหรับลบ หรือ จัดการ เวลาเราจะเขียนหน้าจัดการ
client_name เอาไว้เป็นชื่อ sub
client_ip เอาไว้เป็นเก็บไอพีที่อัพเดท
client_token เอาไว้ แบบว่า เป็น token กันคนมาแกล้งอัพเดท ของเรา
ต่อ ไป เข้าไปที่หน้า cloudflare.com คลิกเมนู ชื่อ เข้า My seting เมนูอยู่ขวามือบนน่ะครับ
เลื่อนมาล่าง ๆ สุดจะเจอ
ตรง Global API Key ให้เราคลิก View Key มันจะบอก คีย์ เรามาให้ copy. เก็บไว้อย่าให้ใครรู้
ต่อมาเข้ามาหน้าจัดการโดเมนของเรา เลือกเมนู OVERVIEW
เลื่อนมากลาง ๆ หน้าจะพบกับ Zone ID: เก็บเลขไว้น่ะ
กลับมาที่เว็บ ทำหน้าสำหรับ อัพเดท ไอพีกัน
ทำโค๊ด php. ชือ update.php
<?php
//ดึงไอพี ที่เรามาว่าไอพีอ่ะไร ไว้เอาไปอัพเดท
$IP_CLIENT=$_SERVER[‘REMOTE_ADDR’];
$KEY=$_GET[‘token’];
$SUB_DOMAIN=$_GET[‘domain’]; // SUB DOMAIN เรา
//เช็ค กับคีย์ที่เราตั้งไว้ ว่ามันตรงที่เราฟิกมั้ยไม่ตรงก็ข้ามไปไม่ทำไร
if($_GET[‘token’]==’xxxx’)
{
$ZONE_ID=’1234567890'; //ZONE_ID ของ DOMAIN เรา
$API_KEY==’XXXXXXXX’; // Global API Key
$email_authen=”/admin@xxx.com”; //email ที่ทำการ สมัคร cloudflare ไว้
//ดึงค่า ID dns_records มาก่อน
$url=”/https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?type=A&name=$SUB_DOMAIN";
$queryData = array(‘message’ => $message);
$queryData = http_build_query($queryData,’’,’&’);
$headerOptions = array( ‘http’=>array(
‘method’=>’GET’,
‘header’=> “Content-Type: application/json\r\n”
.”X-Auth-Key: “.$API_KEY.”\r\n”
.”X-Auth-Email: “.$email_authen.”\r\n” ));
$context = stream_context_create($headerOptions);
$result = file_get_contents($url, FALSE, $context);
$res = json_decode($result, true);
$Records_ID=$res[‘result’][0][‘id’]; //ID dns_records มาก่อน
$url = “/https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$Records_ID";
$ch = curl_init();
$header = array();
$header[] = “X-Auth-Email: $email_authen”;
$header[] = “X-Auth-Key: $API_KEY”;
$header[]=’Content-Type: application/json’;
$curl = curl_init($url);
$data = array(
‘type’ => ‘A’,
‘name’ => $SUB_DOMAIN,
‘content’ => $IP_CLIENT,
‘ttl’ => ‘120’,
‘proxied’ => ‘false’,
);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, “PUT”);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, ‘{“type”:”A”,”name”:”’.$SUB_DOMAIN.’”,”content”:”’.$IP_CLIENT.’”,”ttl”:120,”proxied”:false}’);
// Make the REST call, returning the result
$response = curl_exec($curl);
if (!$response) {
die(“Connection Failure.n”);
}
print $response;
}
ต่อ ไป ก็ เซ็ต ให้ mikrotik หรือ อุปกร์ เรียกเข้ามาเว็บตาม url
/http://ip เซิฟ/update.php?token=xxx&domain=test.mt108.info
เปลี่ยน xxx เป็นค่า คีย์ ที่เราตั้งไว้ test.mt108.info ก็เป็นชื่อซัพโดเมนที่เราทำไว้
หลังจากเรียก มันจะ api ไปอัพเดทที่ cloudflare.com ให้เลย
ปรับให้รันทุกห้านาทีก็ได้. แค่นี้ก็ได้ ddns ไว้ใช้ล่ะ
อยากปรับ ให้สะดวกก็ทำเชื่อกับฐานข้อมูล mysql เอาครับ
หากต้องการ บริจาค ให้ผู้เขียน ได้ที่นี่ครับ
แก้ตัวเลข 25 เป็นจำนวนเงินที่คุณพอใจ ตามศัทธา
/https://www.paypal.me/Thaigqsoft/25
credit : /https://medium.com/@tanakornpiamsin/%E0%B8%A1%E0%B8%B2%E0%B8%97%E0%B8%B3-ddns-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B9%80%E0%B8%AD%E0%B8%87%E0%B8%81%E0%B8%B1%E0%B8%99%E0%B9%80%E0%B8%96%E0%B8%AD%E0%B8%B0-4f447ad98e4